<?php

require_once(SERVER_ROOT . '/authenticate/' . 'Authenticator.php');
require_once(SERVER_ROOT . '/daos/' . 'ClienteDAO.php');

class ClienteController {

	private $clienteDAO;
	private $usuario;

	public function __construct() {
		$this->clienteDAO = new ClienteDAO();
		$this->usuario = Authenticator::getUser();
	}

	public function salvar(array $params) {
		//Validar campos ?
		//campos obrigatorios
		if (empty($params["nome"])) {
			$nome = "";
		} else {
			$nome = $params["nome"];
		}
		if (empty($params["endereco"])) {
			$endereco = "";
		} else {
			$endereco = $params["endereco"];
		}
		if (empty($params["cidade"])) {
			$cidade = "";
		} else {
			$cidade = $params["cidade"];
		}
		if (empty($params["estado"])) {
			$estado = "";
		} else {
			$estado = $params["estado"];
		}
		if (empty($params["cep"])) {
			$cep = "";
		} else {
			$cep = $params["cep"];
		}
		if (empty($params["telefone_fixo"])) {
			$telefone_fixo = "";
		} else {
			$telefone_fixo = $params["telefone_fixo"];
		}
		if (empty($params["telefone_movel"])) {
			$telefone_movel = "";
		} else {
			$telefone_movel = $params["telefone_movel"];
		}
		if (empty($params["email"])) {
			$email = "";
		} else {
			$email = $params["email"];
		}
		if (empty($params["data_nascimento"])) {
			$data_nascimento = "";
		} else {
			$data_nascimento = $params["data_nascimento"];
		}
		if (empty($params["profissao"])) {
			$profissao = "";
		} else {
			$profissao = $params["profissao"];
		}
		if (empty($params["estado_civil"])) {
			$estado_civil = "";
		} else {
			$estado_civil = $params["estado_civil"];
		}
		if (empty($params["rg"])) {
			$rg = "";
		} else {
			$rg = $params["rg"];
		}
		if (empty($params["cpf"])) {
			$cpf = "";
		} else {
			$cpf = $params["cpf"];
		}
		$data = array(
				'id_escritorio' => $this->usuario->id_escritorio, 'nome' => $nome, 'endereco' => $endereco, 'cidade' => $cidade, 'estado' => $estado, 'cep' => $cep, 'telefone_fixo' => $telefone_fixo, 'telefone_movel' => $telefone_movel, 'email' => $email, 'data_nascimento' => $data_nascimento, 'profissao' => $profissao, 'estado_civil' => $estado_civil, 'rg' => $rg, 'cpf' => $cpf, 'status' => 1);
		$result = $this->clienteDAO->save($data);
		//retorno 1 caso salve o cliente ou 0 para erro
		echo json_encode(array($result));
	}

	public function getCliente(array $params) {

		$row = $this->clienteDAO->findById($params['id']);

		$response = array(
				$row['id_cliente'],
				$row['nome'],
				$row['endereco'],
				$row['cidade'],
				$row['estado'],
				$row['cep'],
				$row['telefone_fixo'],
				$row['telefone_movel'],
				$row['email'],
				$row['data_nascimento'],
				$row['profissao'],
				$row['estado_civil'],
				$row['rg'],
				$row['cpf'],
				$row['status']
		);
		echo json_encode($response);
	}

	public function atualizarCliente(array $params) {
		$rows = $this->clienteDAO->update($params);
		if ($rows) {
			echo "ok";
		} else {
			echo "fail";
		}
	}

	public function ativarCliente(array $params) {
		$this->clienteDAO->activateClienteById($params['id']);
	}

	public function inativarCliente(array $params) {
		$this->clienteDAO->inactivateClienteById($params['id']);
	}

	public function removerCliente(array $params) {
		$id = $params['id'];
		$result = $this->clienteDAO->removeById($id);
		if ($result == 3) {
			echo "ok";
		} else {
			echo "fail";
		}
	}

	public function desassociarClienteDoProcesso(array $params) {
		$this->clienteDAO->desassociateClienteProcesso($params['id_processo'], $params['id_cliente']);
	}


	public function associarClienteDoProcesso(array $params) {
		$this->clienteDAO->associarClienteProcesso($params['id_processo'], $params['cpf_cliente']);
	}

	public function autoCompleteCliente(array $params) {
		$clientes = $this->clienteDAO->findClienteAutoComplete($params['name_startsWith']);
		$response = array('root' => array('clientes' => $clientes));
		echo json_encode($response);
	}

	public function listAll($p) {
		$page = $p['page'];
		$limit = $p['rows'];
		$sidx = $p['sidx'];
		$sord = $p['sord'];
		$search_field = $p['searchField'];
		$search_string = $p['searchString'];
		$search_oper = $p['searchOper'];
		if (!$sidx)
			$sidx = 1;
		$count = $this->clienteDAO->count();
		$total_pages = ($count > 0 ? ceil($count / $limit) : $total_pages = 0);
		if ($page > $total_pages)
			$page = $total_pages;
		$start = $limit * $page - $limit;
		if ($start < 0)
			$start = 0;
		if ($search_string == "") {
			$result = $this->clienteDAO->findAllByEscritorio($sidx, $sord, $start, $limit);
		} else {
			$result = $this->clienteDAO->findAllWithFilters($sidx, $sord, $start, $limit, $search_field, $search_string, $search_oper);
		}

		$response->page = $page;
		$response->total = $total_pages;
		$response->records = $count;
		for ($i = 0; $i < count($result); $i++) {
			$row = $result[$i];
			$response->rows[$i]['id'] = $row['id_cliente'];
			$response->rows[$i]['cell'] = array($row['id_cliente'], $row['nome'], $row['endereco'], $row['cidade'], $row['estado'], $row['cep'], $row['telefone_fixo'], $row['telefone_movel'], $row['email'], $row['data_nascimento'], $row['profissao'], $row['estado_civil'], $row['rg'], $row['cpf'], $row['status'], '');
		}
		echo json_encode($response);
	}

	public function listAllByProcessoId($p) {
		$page = $p['page'];
		$limit = $p['rows'];
		$sidx = $p['sidx'];
		$sord = $p['sord'];
		$id_processo = $p['id_processo'];
                $search_field = $p['searchField'];
		$search_string = $p['searchString'];
		$search_oper = $p['searchOper'];
		if (!$sidx)
			$sidx = 1;
		$count = $this->clienteDAO->countByOffice($this->usuario->id_escritorio);
		$total_pages = ($count > 0 ? ceil($count / $limit) : $total_pages = 0);
		if ($page > $total_pages)
			$page = $total_pages;
		$start = $limit * $page - $limit;
		if ($start < 0)
			$start = 0;
                if ($search_string == "") {
                    $result = $this->clienteDAO->findAllByIdProcesso($id_processo, $sidx, $sord, $start, $limit);
                } else {
                    $result = $this->clienteDAO->findAllByIdProcessoWithFilters($id_processo, $sidx, $sord, $start, $limit, $search_field, $search_string, $search_oper);
                }

		$response->page = $page;
		$response->total = $total_pages;
		$response->records = $count;
		for ($i = 0; $i < count($result); $i++) {
			$row = $result[$i];
			$response->rows[$i]['id'] = $row['id_cliente'];
			$response->rows[$i]['cell'] = array($row['id_cliente'], $row['nome'], $row['endereco'], $row['cidade'], $row['estado'], $row['cep'], $row['telefone_fixo'], $row['telefone_movel'], $row['email'], $row['data_nascimento'], $row['profissao'], $row['estado_civil'], $row['rg'], $row['cpf'], '');
		}
		echo json_encode($response);
	}

	public function listAllByEscritorio($p) {
		$page = $p['page'];
		$limit = $p['rows'];
		$sidx = $p['sidx'];
		$sord = $p['sord'];
		$search_field = $p['searchField'];
		$search_string = $p['searchString'];
		$search_oper = $p['searchOper'];
		if (!$sidx)
			$sidx = 1;
		$count = $this->clienteDAO->countByOffice($this->usuario->id_escritorio);
		$total_pages = ($count > 0 ? ceil($count / $limit) : $total_pages = 0);
		if ($page > $total_pages)
			$page = $total_pages;
		$start = $limit * $page - $limit;
		if ($start < 0)
			$start = 0;
		if ($search_string == "") {
			$result = $this->clienteDAO->findAllByEscritorio($sidx, $sord, $start, $limit);
		} else {
			$result = $this->clienteDAO->findAllByEscritorioWithFilters($sidx, $sord, $start, $limit, $search_field, $search_string, $search_oper);
		}

		$response->page = $page;
		$response->total = $total_pages;
		$response->records = $count;
		for ($i = 0; $i < count($result); $i++) {
			$row = $result[$i];
			$response->rows[$i]['id'] = $row['id_cliente'];
			$response->rows[$i]['cell'] = array($row['id_cliente'], $row['nome'], $row['endereco'], $row['cidade'], $row['estado'], $row['cep'], $row['telefone_fixo'], $row['telefone_movel'], $row['email'], $row['data_nascimento'], $row['profissao'], $row['estado_civil'], $row['rg'], $row['cpf'], $row['status'], '');
		}
		echo json_encode($response);
	}

}